x86: Disable cpuidle by default unless hpet broadcast is available.
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 15 Apr 2009 07:40:12 +0000 (08:40 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 15 Apr 2009 07:40:12 +0000 (08:40 +0100)
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
xen/arch/x86/setup.c
xen/arch/x86/time.c

index 5da0b33039952bb5faa13b4b446ef53ed0ad46f7..8f2e5eedd42cda7e89f3d26e318105346b9bfc01 100644 (file)
@@ -89,7 +89,7 @@ boolean_param("noapic", skip_ioapic_setup);
 
 /* **** Linux config option: propagated to domain0. */
 /* xen_cpuidle: xen control cstate. */
-/*static*/ int xen_cpuidle = 1;
+/*static*/ int xen_cpuidle = -1;
 boolean_param("cpuidle", xen_cpuidle);
 
 int early_boot = 1;
index ffe90ed1b96bb4ab418ced2317b808b43d6cb07d..b44871e13936e0d63d950df52635bfdd8e56ce12 100644 (file)
@@ -1279,8 +1279,17 @@ static int disable_pit_irq(void)
         hpet_broadcast_init();
         if ( !hpet_broadcast_is_available() )
         {
-            printk("HPET broadcast init failed, turn to PIT broadcast.\n");
-            return 0;
+            if ( xen_cpuidle == -1 )
+            {
+                xen_cpuidle = 0;
+                printk("CPUIDLE: disabled due to no HPET. "
+                       "Force enable with 'cpuidle'.\n");
+            }
+            else
+            {
+                printk("HPET broadcast init failed, turn to PIT broadcast.\n");
+                return 0;
+            }
         }
     }